python tkinter mainloop 增加循环 tkinter消息循环 您所在的位置:网站首页 Python 消息循环 python tkinter mainloop 增加循环 tkinter消息循环

python tkinter mainloop 增加循环 tkinter消息循环

#python tkinter mainloop 增加循环 tkinter消息循环| 来源: 网络整理| 查看: 265

python tkinter mainloop 增加循环 tkinter消息循环 转载

mob6454cc6f4a4e 2023-12-25 09:59:46

文章标签 Python 消息机制 事件绑定 输入框 弹出式菜单 文章分类 Python 后端开发

文章目录消息机制Tkinter事件绑定Entry菜单弹出式菜单canvas画布

消息机制消息的传递机制 自动发送消息/事件消息由系统负责发送到队列有相关组件进行绑定/设置后端自动选择感兴趣的事件并作出反应消息格式 >[modifier-]—type—[-detail]>:Button表示按钮事件,1表示鼠标左键,2表示滑轮:键盘A键位:同时按下control+shift+A键:# 事件的简单例子 import tkinter def baseLabel(event): global baseFrame print("哈哈,我被点击了") lb = tkinter.Label(baseFrame, text="谢谢点击") lb.pack() # 画出程序的总框架 baseFrame = tkinter.Tk() lb = tkinter.Label(baseFrame, text="模拟按钮") # label绑定相应的消息和处理函数 # 自动获取左键点击,并启动相应的处理函数baseLabel lb.bind("", baseLabel) lb.pack() # 启动消息循环 # 到此,表示程序开始运行 baseFrame.mainloop()Tkinter事件绑定bind-all:全局范围的绑定,默认的是全局快捷键,比如F1是帮助文档bind-class:接受三个参数,第一个类名,第二个事件,第三个是操作 w.bind_class(“Entry”, ", my_paste)bind:单独对某一个实例进行绑定unbind:解绑,一个参数,即你要解绑那个事件Entry输入框,功能单一entry[“show”] = “*”, 设置遮挡字符# 输入框案例 import tkinter # 模拟的是登录函数 def reg(): # 从相应输入框中,得到用户的输入 name = e1.get() pwd = e2.get() t1 = len(name) t2 = len(pwd) if name == "111" and pwd == "222": # 需要理解下面代码的含义 lb3["text"] = "登录成功" else: lb3['text'] = "用户名或密码错误" # 输入框删除掉用户输入的内容 # 注意delete的两个参数,表示从第几个删除到第几个 e1.delete(0,t1) e2.delete(0,t2) # 启动舞台 baseFrame = tkinter.Tk() lb1 = tkinter.Label(baseFrame, text="用户名") lb1.grid(row=0, column=0, stick=tkinter.W ) e1 = tkinter.Entry(baseFrame) e1.grid(row=0, column=1, stick=tkinter.E) lb2 = tkinter.Label(baseFrame, text="密码: ") lb2.grid(row=1, column=0, stick=tkinter.W ) e2 = tkinter.Entry(baseFrame) e2.grid(row=1, column=1, stick=tkinter.E) e2['show'] = '*' # Button参数command的意思是,当按钮被点击后启动相应的处理函数 btn = tkinter.Button(baseFrame, text="登录", command=reg) btn.grid(row=2, column=1, stick=tkinter.E) lb3 = tkinter.Label(baseFrame, text="") lb3.grid(row = 3) # 启动主Frame baseFrame.mainloop()菜单普通菜单第一个Menu类定义的是parentadd_command添加菜单项,如果菜单时顶层菜单,则从作向右添加,否则就是下拉菜单 label:指定菜单项名称command:点击后相应的调用函数acceletor:快捷键underline:指定是否菜单信息下有横线menu:属性指定使用哪一个作为顶级菜单# 普通菜单的代码 import tkinter baseFrame = tkinter.Tk() menubar = tkinter.Menu(baseFrame) for item in ['File', 'Edit', 'View', 'About']: menubar.add_command(label=item) baseFrame['menu'] = menubar baseFrame.mainloop()级联菜单add_casecade:级联菜单,作用就是引出后面的菜单menu:把菜单级联到那个菜单上label: 名称过程: 建立menu实例add_commandadd_cascadeimport tkinter baseFrame = tkinter.Tk() menubar = tkinter.Menu(baseFrame) emenu = tkinter.Menu(menubar) for item in ['Copy', 'Past', 'Cut']: emenu.add_command(label=item) menubar.add_cascade(label='File') menubar.add_cascade(label='Edit', menu=emenu) menubar.add_cascade(label='About') baseFrame['menu'] = menubar baseFrame.mainloop()弹出式菜单也叫上下文菜单思路: 建立菜单并添加各种功能监听鼠标右键如果点击右键,则根据位置判断弹出调用Menu的pop方法add_separator: 添加分隔符import tkinter def makeLabel(): global baseFrame tkinter.Label(baseFrame, text="PHP是最好的编程语言,我用Python").pack() baseFrame = tkinter.Tk() menubar = tkinter.Menu(baseFrame) for x in ['麻辣香菇', '气锅鸡', '东坡肘子']: menubar.add_separator() menubar.add_command(label=x) menubar.add_command(label='重庆火锅', command=makeLabel) # 事件处理函数一定要至少有一个参数,且第一个参数表示的是系统事件 def pop(event): # 注意使用 event.x 和 event.x_root的区别 #menubar.post(event.x_root, event.y_root) menubar.post(event.x_root, event.y_root) baseFrame.bind("", pop) baseFrame.mainloop()canvas画布画布:可以自由的在上面画的小舞台在画布上绘制对象,通常用create_xxxx, xxxx=对象类型, 例如line, rectangle画布的作用是把一定组件画到画布上显示出来画布所支持的组件: arcbitmapimage(BitmapImage, PhotoImage)lineovalpolygonrectangletextwinodw(组件)每次调用create_xxx都会返回一个创建的组件的ID,同时也可以用tag属性指定其标签通过调用canvas.move实现一个一次性动作# 简单画布 import tkinter baseFrame = tkinter.Tk() cvs = tkinter.Canvas(baseFrame, width=300, height=200) cvs.pack() # 一条线需要两个点指明起始 # 参数数字的单位是px cvs.create_line(23,23, 190,234) cvs.create_text(56,67, text="I LOVE PYTHON") baseFrame.mainloop()# 画一个五角星 import tkinter import math as m baseFrame = tkinter.Tk() w = tkinter.Canvas(baseFrame, width=300, height=300, background="gray" ) w.pack() center_x = 150 center_y = 150 r = 150 # 依次存放五个点的位置 points = [ #左上点 # pi是一个常量数字,3.1415926 center_x - int(r * m.sin(2 * m.pi / 5)), center_y - int(r * m.cos(2 * m.pi / 5)), #右上点 center_x + int(r * m.sin(2 * m.pi / 5)), center_y - int(r * m.cos(2 * m.pi / 5)), #左下点 center_x - int(r * m.sin( m.pi / 5)), center_y + int(r * m.cos( m.pi / 5)), #顶点 center_x, center_y - r, #右下点 center_x + int(r * m.sin(m.pi / 5)), center_y + int(r * m.cos(m.pi / 5)), ] # 创建一个多边形 w.create_polygon(points, outline="green", fill="yellow") w.create_text(150,150, text="五角星") baseFrame.mainloop()import tkinter baseFrame = tkinter.Tk() def btnClick(event): global w w.move(id_ball, 12,5) w.move("fall", 0,5) w = tkinter.Canvas(baseFrame, width=500, height=400) w.pack() w.bind("", btnClick) # 创建组件后返回id id_ball = w.create_oval(20,20, 50,50, fill="green") # 创建组件使用tag属性 w.create_text(123,56, fill="red", text="ILovePython", tag="fall") # 创建的时候如果没有指定tag可以利用addtag_withtag添加 # 同类函数还有 addtag_all, addtag_above, addtag_xxx等等 id_rectangle = w.create_rectangle(56,78,173,110, fill="gray") w.addtag_withtag("fall", id_rectangle) baseFrame.mainloop()

本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。 收藏 评论 分享 举报

上一篇:python chartdet包下载 python charts

下一篇:docker mysql 重启数据库清空 docker mysql一直在重启



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有